2013-08-12 2 views
2

Я пытался использовать тягу выполнить сокращение по некоторым данным, но во время компиляции я получаю много предупреждений о возможной потере преобразования данныхупорного предупреждение данных потери преобразования

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(338) : see reference to function template instantiation 'size_t thrust::system::cuda::detail::block_size_with_maximum_potential_occupancy<thrust::system::cuda::detail::cuda_launch_config_detail::util::zero_function<T>>(const thrust::system::cuda::detail::function_attributes_t &,const thrust::system::cuda::detail::device_properties_t &,UnaryFunction)' being compiled 
1>   with 
1>   [ 
1>    T=size_t, 
1>    UnaryFunction=thrust::system::cuda::detail::cuda_launch_config_detail::util::zero_function<size_t> 
1>   ] 
1>C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(147): warning C4267: 'return' : conversion from 'size_t' to 'int', possible loss of data 
1>   C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(159) : see reference to function template instantiation 'L thrust::system::cuda::detail::cuda_launch_config_detail::util::divide_ri<L,R>(const L,const R)' being compiled 
1>   with 
1>   [ 
1>    L=int, 
1>    R=size_t 
1>   ] 
1>   C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include\thrust/system/cuda/detail/cuda_launch_config.h(272) : see reference to function template instantiation 'L thrust::system::cuda::detail::cuda_launch_config_detail::util::round_i<L,size_t>(const L,const R)' being compiled 
1>   with 
1>   [ 
1>    L=int, 
1>    R=size_t 
1>   ] 

я знаю, те предупреждения, но они действительно раздражают, есть ли способ отключить их?

+0

Итак, у вас есть способ избежать этих предупреждений, не игнорируя их? Я считаю, что это сложно, потому что толчок является библиотекой шаблонов, даже трудно найти, что происходит не так, а не изменять код тяги. –

+0

Кто-нибудь понял эти предупреждения? Не может быть хорошо. Я не вижу ни одного места в моем коде, где я использую 'int' неуместно, и я вижу, что многие/большинство этих предупреждений являются внутренними для Thrust - в стартовом коде и так далее. – CLWill

ответ

1

Это два года спустя, и проблема (-я) все еще существует. Я выяснил, что здесь происходит, и у вас есть решение.

Во-первых, чтобы повторить проблему. Если вы создаете новый проект CUDA (я использую CUDA 7.5 и Visual Studio 2013) и положить в просто:

#include <thrust/device_vector.h> 

int main() 
{ 
    thrust::device_vector<int> test; 
    return 0; 
} 

Затем переключить проект на 64-разрядную (изменить конфигурации для x64, который изменяет компилятор до генерации кода 64), вы получаете несколько предупреждений из Thrust, которые жалуются на потери от конверсии от size_t до int. Эти предупреждения все идут (по крайней мере сегодня) из файла Thrust execution_policy.hpp.

В этом файле имеется несколько случаев, когда тип size_type определяется как int, а затем используется как эквивалентное или возвращаемое значение для данных size_t. Это объясняет предупреждения. В MSBC 64-бит-земля a size_t составляет 2x размер int.

В качестве теста, я изменил несколько примеров:

typedef int size_type; 

в execution_policy.hpp к:

typedef size_t size_type; 

и все предупреждения уходят.

Теперь я перейду к проекту github Thrust и предлагаю именно такое изменение.

Надеюсь, это помогает кому-то, это заводило меня с ума.

1

Вы можете использовать #pragma warning (disable : 4267) Я бы предположил. Однако, если у вас нет убедительной причины не делать этого, я исправлю код вместо этого.

size_t и int не то же самое. То, что может сработать для вас сейчас, может привести к тому, что вы кусаете вас в местах, где вы не хотите, чтобы их укусили в какой-то момент. См. Например, "Why size_t matters".

+0

Спасибо за предложение. Очень интересная статья. – BRabbit27