   }
 
   CHECK_REQUIREMENT(totalGlobalMem, 1ull * (1ull << 30));
-  CHECK_REQUIREMENT(sharedMemPerBlock, 1ull * (1ull << 30));
+  CHECK_REQUIREMENT(sharedMemPerBlock, 16ull * (1ull << 10));
   CHECK_REQUIREMENT(maxThreadsPerBlock, 1024);
-  CHECK_REQUIREMENT_VECTOR(maxThreadsPerBlock, 0, 1024);
-  CHECK_REQUIREMENT_VECTOR(maxThreadsPerBlock, 1, 1024);
-  CHECK_REQUIREMENT_VECTOR(maxThreadsPerBlock, 2, 64);
+  CHECK_REQUIREMENT_VECTOR(maxThreadsDim, 0, 1024);
+  CHECK_REQUIREMENT_VECTOR(maxThreadsDim, 1, 1024);
+  CHECK_REQUIREMENT_VECTOR(maxThreadsDim, 2, 64);
   CHECK_REQUIREMENT_VECTOR(maxGridSize, 0, 65535);
   CHECK_REQUIREMENT_VECTOR(maxGridSize, 1, 65535);
   CHECK_REQUIREMENT_VECTOR(maxGridSize, 2, 65535);

  { \
    if (prop.name < (value)) { \
      THROW_ERROR( \
          "CUDA Device " << dev_id_ << \
          " does not satisfy the minimum requirement by primitiv: " \
          << "property: " << #name << ", " \
          << "value: " << prop.name << ", " \

  { \
    if (prop.name[index] < (value)) { \
      THROW_ERROR( \
          "CUDA Device " << device_id << \
          " does not satisfy the minimum requirement by primitiv: " \
          << "property: " << #name << "[" << #index << "], " \
          << "value: " << prop.name[index] << ", " \
