Skip to main content

Movendo Média Em Cuda


O que é CUDA Enroll hoje Introdução à Programação Paralela Um curso aberto e on-line da Udacity Instrutores: Dr. John Owens, UC Davis e Dr. David Luebke, NVIDIA CUDA reg é uma plataforma de computação paralela e modelo de programação inventado pela NVIDIA. Permite aumentos dramáticos no desempenho de computação aproveitando a potência da unidade de processamento gráfico (GPU). Com milhões de GPUs CUDA-enabled até agora, os desenvolvedores de software, cientistas e pesquisadores estão encontrando amplos usos para computação GPU com CUDA. Aqui estão alguns exemplos: Identificar placa escondida nas artérias. Os ataques cardíacos são a principal causa de morte em todo o mundo. Harvard Engineering, Harvard Medical School e Brigham Womens Hospital se uniram para usar GPUs para simular o fluxo sanguíneo e identificar a placa arterial escondida sem técnicas invasivas de imagem ou cirurgia exploratória. Analisar o fluxo de tráfego aéreo. O Sistema Nacional de Espaço Aéreo gerencia a coordenação nacional do fluxo de tráfego aéreo. Modelos de computador ajudam a identificar novas maneiras de aliviar o congestionamento e manter o tráfego do avião se movendo eficientemente. Usando a potência computacional das GPUs, uma equipe da NASA obteve um grande ganho de desempenho, reduzindo o tempo de análise de dez minutos para três segundos. Visualize moléculas. Uma simulação molecular chamada NAMD (nanoescala molecular dinâmica) obtém um grande impulso de desempenho com GPUs. A aceleração é resultado da arquitetura paralela das GPUs, que permite que os desenvolvedores do NAMD transportem porções computacionais intensivas do aplicativo para a GPU usando o CUDA Toolkit. Background GPU Computing: The Revolution Você está diante de imperativos: Melhore o desempenho. Resolver um problema mais rapidamente. O processamento paralelo seria mais rápido, mas a curva de aprendizado é íngreme não é mais. Com CUDA, você pode enviar código C, C e Fortran direto para GPU, sem linguagem de montagem necessária. Desenvolvedores em empresas como a Adobe, ANSYS, Autodesk, MathWorks e Wolfram Research estão acordando que gigante dormindo a GPU - para fazer fins gerais de computação científica e de engenharia em uma variedade de plataformas. Usando linguagens de alto nível, os aplicativos acelerados por GPU executam a parte seqüencial de sua carga de trabalho na CPU, otimizada para o desempenho de um único thread, enquanto aceleram o processamento paralelo na GPU. Isso é chamado de computação GPU. A computação GPU é possível porque a GPU de hoje faz muito mais do que renderizar gráficos: Sizzles com um teraflop de desempenho de ponto flutuante e crunches tarefas de aplicação projetado para qualquer coisa de finanças para medicina. A CUDA é amplamente implantada através de milhares de aplicativos e trabalhos de pesquisa publicados e apoiada por uma base instalada de mais de 375 milhões de GPUs CUDA em notebooks, estações de trabalho, clusters de computação e supercomputadores. Visite a Zona CUDA para obter exemplos de aplicações em diversos mercados verticais e desperte seu gigante GPU. História da Computação GPU As primeiras GPUs foram projetadas como aceleradores gráficos, suportando apenas tubulações específicas de função fixa. Começando no final dos anos 90, o hardware tornou-se cada vez mais programável, culminando com o primeiro GPU da NVIDIA em 1999. Menos de um ano após a NVIDIA cunhar o termo GPU, os artistas e desenvolvedores de jogos não eram os únicos a fazer trabalho inovador com a tecnologia: Aproveitando seu excelente desempenho em ponto flutuante. O GPU de General Purpose (GPGPU) movimento tinha amanheceu. Mas GPGPU estava longe de ser fácil na época, mesmo para aqueles que sabiam linguagens de programação gráfica como OpenGL. Os desenvolvedores tinham de mapear cálculos científicos em problemas que poderiam ser representados por triângulos e polígonos. GPGPU estava praticamente fora dos limites para aqueles que não haviam memorizado as últimas APIs gráficas até que um grupo de pesquisadores da Universidade de Stanford decidiu re-imaginar a GPU como um processador de streaming. Em 2003, uma equipe de pesquisadores liderada por Ian Buck revelou Brook, o primeiro modelo de programação amplamente adotado para estender C com construções de dados paralelos. Usando conceitos como fluxos, kernels e operadores de redução, o compilador Brook eo sistema runtime expuseram a GPU como um processador de propósito geral em uma linguagem de alto nível. Mais importante ainda, os programas do Brook não eram apenas mais fáceis de escrever do que o código GPU manualmente ajustado, eram sete vezes mais rápidos do que o código existente semelhante. A NVIDIA sabia que o hardware incrivelmente rápido precisava ser acoplado a ferramentas intuitivas de software e hardware e convidou Ian Buck para se juntar à empresa e começar a desenvolver uma solução para executar C na GPU. Juntando o software e o hardware, a NVIDIA revelou a CUDA em 2006, a primeira solução do mundo para computação geral em GPUs. Ferramentas e Treinamento Hoje, o ecossistema CUDA está crescendo rapidamente à medida que mais e mais empresas fornecem ferramentas, serviços e soluções de classe mundial. Se você quiser escrever seu próprio código, a maneira mais fácil de aproveitar o desempenho das GPUs é com o CUDA Toolkit. Que fornece um ambiente de desenvolvimento abrangente para desenvolvedores C e C. O CUDA Toolkit inclui um compilador, bibliotecas matemáticas e ferramentas para depuração e otimização do desempenho de seus aplicativos. Você também encontrará exemplos de código, guias de programação, manuais de usuário, referências de API e outras documentações para ajudá-lo a começar. A NVIDIA fornece tudo isso de forma gratuita, incluindo NVIDIA Parallel Nsight para Visual Studio, o primeiro ambiente de desenvolvimento de indústrias para aplicações paralelas que usam GPUs e CPUs. Aprender a usar CUDA é conveniente, com treinamento on-line abrangente disponível, bem como outros recursos, como webinars e livros. Mais de 400 universidades e faculdades ensinam programação CUDA, incluindo dezenas de CUDA Centros de Excelência e Centros de Pesquisa e Treinamento CUDA. Para desenvolvedoresNão sou um programador com nenhuma habilidade. Apenas alguém curioso sobre CUDA e assim que eu estou fazendo uma leitura pequena. Eu corri através de um exemplo de usar Thrust para fazer uma média móvel: O exemplo, como ele é, é executado e funciona principalmente corretamente. No entanto, é trivial no sentido de que ele só faz uma operação média móvel. Como eu diria 352 dessas operações de média móvel em paralelo, todos operando no mesmo fluxo de dados Em minha mente o fluxo do programa pode ser: Gerar o amplificador de dados enviá-lo para um núcleo CUDA. (Mesmo que o código existente, mas acho que os comprimentos de 1000 ou 10000 em vez de 30) Copie-o do núcleo CUDA em sua todos os outros 351 núcleos CUDA na minha GTX 465 Diga a cada núcleo CUDA o número de itens de dados para a média mais. (4. 5. 6. 352. 353. 354) Diga ao dispositivo para executar a média em cada núcleo em paralelo Leia os resultados de cada núcleo Eu recebo que este código faz tudo acontecer, mas como faço para obter Thrust para fazer Muitos destes em paralelo Meu interesse aqui é sobre algo como dados de ações. Se eu estou olhando para os preços GOOG Id que colocar na GPU usando todos os núcleos e deixá-lo lá. Id então ser livre para fazer lotes de processamento sem carregar os dados mais e apenas a leitura de volta resultados de cada núcleo. NOTA: Talvez eu não queira usar o GOOG em todos os núcleos. Alguns núcleos podem ser GOOG, outros com algum outro símbolo, mas vou chegar lá mais tarde. Im apenas pensando que eu não quero os dados conservados em estoque na memória global se há espaço suficiente em cada núcleo. Eu suponho que isso é bastante simples para CUDA amp Thrust perguntou Sep 12 12 às 19:39 Minha compreensão é que você está interessado nas seguintes duas situações: Você tem uma longa seqüência de itens e você deseja calcular um certo número de médias, por Com média em diferentes números de itens, ou seja, usando diferentes comprimentos para a janela da média móvel. Isto é o que eu entendo de sua pergunta original. Você tem uma série de seqüências, armazenadas consecutivamente na memória, e você quer medi-las em paralelo com uma janela de média fixa de tamanho 2 RADIUS 1. Isto é o que o código ArrayFire proposto pela asm faz - você aceitou. Em vez de usar CUDA Thrust, acho que seria mais fácil escrever seu próprio kernel CUDA para fazer as operações acima. Abaixo, um exemplo totalmente trabalhado que funciona da mesma maneira que o código ArrayFire proposto por asm, cobrindo assim o caso 2. Modificá-lo para cobrir o caso 1 seria direto. Para outra abordagem, você pode truncar a janela de média móvel exponencial e, em seguida, calcular seu sinal filtrado, fazendo uma convolução entre o seu sinal ea janela exponencial. A convolução pode ser calculada usando a biblioteca CUDA FFT livre (cuFFT) porque, como você deve saber, a convolução pode ser expressa como a multiplicação ponto-sábia dos dois sinais no domínio fourier (Este é o apropriadamente chamado Convolution Theorem, Que é executado com uma complexidade de O (n log (n))). Este tipo de abordagem irá minimizar o seu código CUDA kernel e correr muito, muito rapidamente, mesmo em uma GeForce 570 Particularmente, se você pode fazer todos os seus cálculos em única (float) de precisão. Eu gostaria de propor a manipular a equação de diferença acima como indicado abaixo e, em seguida, usando CUDA Thrust primitivas. DIFERENÇA EQUAÇÃO MANIPULAÇÃO - FORMA EXPLÍCITA DA DIFERENÇA EQUAÇÃO Por álgebra simples, você pode encontrar o seguinte: Em conformidade, a forma explícita é a seguinte: CUDA THRUST IMPLEMENTAÇÃO Você pode implementar a forma explícita acima pelas seguintes etapas: Inicializar uma entrada sequencia dinput Alfa, excepto para dinput0 1. Definir um vetor d1 overbetatothen igual a 1, 1beta, 1beta2, 1beta3. Multiply elementwise dinput by d1overbetatothen Executar um inclusivescan para obter a seqüência do yn betan Divida a seqüência acima por 1, 1beta, 1beta2, 1beta3. A abordagem acima pode ser recomendada para sistemas Linear Time-Varying (LTV). Para os sistemas Linear Time-Invariant (LTI), a abordagem FFT mencionada por Paul pode ser recomendada. Estou fornecendo um exemplo dessa abordagem usando CUDA Thrust e cuFFT na minha resposta para FIR filtro em CUDA.

Comments

Popular posts from this blog

Forex Plastico

FOREX é sinônimo de panelas de PVC espumado branco desde 30 anos. A família de produtos FOREX oferece uma gran seleção de materiais de paneles de ligas e de grande qualidade para aplicações no interior eo exterior com uma grande oferta própria. A quotcustomizacinquot tambin es posible: Colores especiais, embalagens especficas e incluso a produccin segn as especificaçÃμes do cliente em componentes da linha de FOREX. Panelas de PVC de alta qualidade feitas na suiça Propiedades superficiais excepcionais A colaboração com distribuidores lderes a garantia dos produtos FOREX em toda Europa Qualidade de Mxima dos produtos e manutenção dos estndares da qualidade Processador mecânico simples com ferramentas estandar do tratamento da madeira e do plástico Os produtos FOREX carecem os componentes perigosos e compram as exigências das diretivas RoHS WEEE e os produtos químicos do produto Químicos da UE (REACH) Gama do produto FOREXclassic Da categoria superior da família de produtos FOREX que tem...

5emas Forex System Pdf

5 EMAs Forex System é um curso de negociação desenvolvido para fins comerciais profissionais. Este curso ajuda você a aprender como entrar no mercado em relação à tendência principal quando um número definido de condições são atendidas. A taxa de sucesso deste sistema de comércio é de cerca de 85, por isso é hora de usar este sistema em sua negociação. O sistema é desenvolvido com base em 2 partes principais que são lógica de entrada e três estratégias de saída. Pode ser muito eficaz para o comércio contra um fracasso de uma tendência principal. Clique aqui para fazer o download de uma grande ferramenta de negociação e estratégia GRÁTIS Uma das coisas mais importantes com este sistema é que não importa que tipo de comércios você gosta melhor. Este sistema pode ser usado para produzir resultados rentáveis ​​em qualquer tipo de negócios que você faz. Ele pode ser negociado como um scalping, swing-trading ou day-trading sistema, o que sozinho torna este sistema excepcional. Você também po...

Bollinger Bandas Rsi Sistema

Indicadores utilizados com esta estratégia Sinais a serem buscados Ponto de entrada Parada-perda Objetivo de lucro Para esta estratégia estaremos examinando os quadros de 4 horas e 30 minutos do gráfico USDSEK. O indicador que usaremos é o Índice de Força Relativa (RSI) (com seu período definido como 14, nível de sobrecompra 8211 70, nível de sobrevenda 8211 30), enquanto também aplicaremos a Banda de Bollinger (com suas configurações padrão). Marcamos o nível 50.00 do RSI e usamo-lo para determinar se o mercado está tendendo para cima ou para baixo. No gráfico de 4 horas da USDSEK, se a leitura RSI for acima de 50,00, então o mercado está em uma tendência de alta e uma leitura abaixo de 50,00 indica uma tendência de baixa. A fim de fazer uma entrada, um comerciante terá de usar o período de 30 minutos. Durante uma tendência de touro no caso de uma vela fecha abaixo da faixa inferior do Bollinger e, em seguida, a próxima vela fecha acima da banda inferior, esta é uma configuração para ...