Thursday 6 July 2017

Dukascopy Jforex Linux Kernel


Eu tenho procurado um servidor privado virtual (VPS) barato mas confiável para executar meu programa de negociação nos últimos meses. Executei meu programa QTD em 3 servidores remotos no Reino Unido e na Alemanha em abril por um mês inteiro como teste de desempenho. Um no Reino Unido em uma nuvem Xen. Um na Alemanha no OpenVZ. E um último também no Reino Unido na tecnologia KVM. Esta publicação é um resumo das minhas descobertas iniciais sobre o que procurar quando escolher um provedor de servidor para executar um servidor de negociação remoto. Tenha em mente que isso é para comércio de varejo low-end e de baixa freqüência. Onde as latências na faixa de dezenas de milissegundos são consideradas boas. O preço geral do preço-alvo é US10-20 por mês para um servidor não gerenciado com 512 MB de ram e equivalente a 600 MHz de cerca de CPU Intel de 2006. O preço baixo é a principal consideração aqui. Se você não se preocupa com os detalhes técnicos, os principais nomes de VPS são Linode. Hetzner. E 6sync para VPSs baseados em Linux. Linode oferece VPS Xen nos EUA e no Reino Unido. 6sync oferece KVM VPSs apenas nos EUA. Ambas as empresas oferecem instâncias baseadas em Linux de 512 MB para 20 como servidor inicial. Hetzner oferece VPS KVM na Alemanha por 7,90. Servidores em nuvem como Amazon EC2 e Rackspace Cloud são muito caros para executar 247. Localização, localização, localização Use um datacenter que seja pelo menos no mesmo subcontinente do seu datacenter. Você não quer que seus dados viajem a meio caminho do mundo apenas para economizar alguns dólares. Adiciona latência desnecessária e os preços são comparáveis ​​nos estados ou na Europa hoje em dia. Embora a Ásia seja outra história. Se você usa mais de um corretor, você pode usar vários servidores ou escolher uma localização do servidor que fica entre eles no backbone da Internet. A TeleGeography fornece mapas globais da internet para identificar melhores locais. Troco com Dukascopy e Oanda. Um na Suíça e outro nos estados. Como tal, os centros de Internet em cidades como Nova York, Londres e Frankfurt são alvos principais para baixa latência entre os dois corretores. À medida que troco mais na Dukascopy, Im tendenciosa para servidores europeus. Além disso, Londres e Frankfurt são o hub de internet 1 e 2 do mundo. Londres tem 7,723 Gbps e Frankfurt tem uma capacidade de 7,218 Gbps em 2010. Considerando que Nova York, 5º no mundo, tem 3.850 Gbps. Tecnologias de Virtualização Os servidores privados virtuais são meramente recursos reservados de um computador em um datacenter. Isto é conseguido através do uso de tecnologias de virtualização. E há muitos desses como eu descobri. Aqui estão três os quais você provavelmente ouvirá sobre sua pesquisa. OpenVZ. Esta é a plataforma mais popular e menos preferida para servidores comerciais. É freqüentemente usado por hosts de orçamento porque os recursos entre instâncias virtualizadas não estão bem isolados. Como tal, um host pode oversell um recurso de servidores como a maioria dos webapps têm tendência esporádica de utilização de recursos. Em outros mundos, é improvável que todos os servidores privados virtuais exigissem o máximo de recursos alocados ao mesmo tempo. No entanto, os servidores de negociação exigem um nível consistente e garantido de recursos de computação. Portanto, fique longe do VPS que é executado no OpenVZ, a menos que você queira ver soluços do servidor. Xen. Isto é o que o Amazon EC2 e o Rackspace Cloud funcionam. O Xen oferece um verdadeiro isolamento de recursos para que você seja menos provável afetado por seus vizinhos de servidores virtuais. O que você vê é também o que você obtém. Então, se você promete 512MB de memória, você terá 512MB de memória. No entanto, o poder de processamento varia enormemente em diferentes fornecedores de VPS. Uma micro instância no Amazon EC2 oferece 613MB de memória, por exemplo. Mas não é igual para uma instância de 256 MB no Rackspace Cloud. Eu consegui executar uma GUI de desktop LXDE mais um programa java no Rackspace, mas não podia fazê-lo na Amazon. KVM. O KVM usa o kernel do Linux para virtualizar. É dito que oferece uma sobrecarga mais baixa ao servidor host para que ele possa fornecer melhor valor do que o Xen. Como o Xen, oferece um verdadeiro isolamento de recursos. Em resumo, Xen ou KVM são bons, mas fique longe de OpenVZ. O sistema operacional A questão chave aqui é: Linux ou Windows Se você não estiver familiarizado com o Linux e não é interessante em aprender sobre isso, use um provedor Windows Server 2003 ou 2008. O Windows Server 2003 é preferido porque usa menos recursos apenas para executar, por isso é mais barato. Observe que os VPS do Windows são 10-20 mais caros, pois você precisa pagar uma concessão de licença mensal. Com o uso de um VPS baseado em Windows, você pode se conectar ao seu servidor através do protocolo de desktop remoto (RDP). É apenas uma questão de executar o aplicativo Remote Desktop em sua máquina local para o seu servidor remoto. Então você verá a área de trabalho das máquinas remotas em sua própria máquina. E então você pode controlar o servidor remoto como qualquer outro computador Windows. Muito simples. No entanto, prefiro executar o Linux por causa de sua renomada estabilidade e menor custo. A desvantagem é que você precisa saber o que está fazendo para ajustar o servidor para negociação. O Linux usa muito pouco recurso de computação para ser executado. Eu posso espremer JForex e Metatrader juntos em um VPS Linux com apenas 256 MB de memória. Em comparação, você precisa de pelo menos 512MB em uma caixa do Windows apenas para que o SO seja executado. E não há taxa de licenciamento para o Linux também. Uma economia dupla. Ao escolher um fornecedor de VPS, considere fatores como localização, tecnologia de virtualização e sistema operacional (s) oferecidos. Uma vez que você reduziu sua pesquisa a uma lista restrita de provedores, o próximo passo é comparar suas ofertas específicas de VPS, observando preços, serviços e especificações técnicas. Tendo estudado a anatomia de uma estratégia JForex vazia (Parte 1 e Parte 2), é hora de dissecar uma operação. MAPlay é a estratégia que está incluída em cada download da JForex API como demonstração. Você pode encontrar o código-fonte completo desta estratégia no srcsinglejartest no pacote compactado da API JForex. Lembre-se de que o primeiro método de interface que é executado no início da estratégia é OnStart. O método OnStart do MAPlay é reproduzido abaixo. As variáveis ​​motorizadas. Indicadores. E console são campos da classe MAPlay. São variáveis ​​globais dentro da classe. O que as linhas 42 a 44 fazem é salvar o IEngine. IIndicadores. E os objetos IConsole para uso posterior. A última linha do OnStart, linha 45, é apenas para imprimir uma mensagem no seu console do programa JForex para notificar o usuário de que a estratégia começou. Uma vez que o OnStart tenha terminado o processamento, o servidor provavelmente encaminhará onTick se um cheque de mercado chegar. Se não for durante as horas de mercado, então não há marca e algum outro evento pode acontecer em vez de onTick. Pense nos métodos como eventos em vez de um processo linear. Você programa sua estratégia JForex de acordo com o que você quer fazer com cada um dos seis eventos IStrategy Interface. Para esta estratégia particular, o programador decide implementar sua estratégia no nível de seleção. Como tal, grande parte do algoritmo de negociação reside em onTick para MAPlay. Observe que esta é uma escolha de design, você pode usar o OnBar se desejar que sua estratégia seja processada no nível da barra (ou você pode usar o OnTick e o OnBar). Heres o código-fonte para onTick no MAPlay. De uma aparência, você pode notar que as variáveis ​​ma0 e ma1 desempenham um papel fundamental na determinação da configuração. Dica: para reverter a engenharia de uma estratégia, pode ser mais fácil trabalhar para trás quando a ordem é colocada, o que é feito pelo engine. submitOrder neste caso. Ma0 e ma1 possuem resultados de médias móveis exponenciais (EMA). Ma0 é o valor atual. Ma1 é o valor das barras anteriores. Linhas 56--63 verificam usando testes IF (linhas 56 e 60) para ver se qualquer uma das variáveis ​​contém dados inválidos. Se os dados forem inválidos, o indicador será calculado e o resto do onTick será ignorado com a declaração de retorno na linha 62. Nota: Os valores dos indicadores às vezes podem ser inválidos (zero, negativo ou Double. NaN., Dependendo da implementação do indicador particular ) Se não houver dados suficientes para calcular ou ocorrer um erro, por exemplo. Os EMAs são obtidos nas linhas 57 e 59 usando o objeto IIndicators (que foi inicializado em onStart). O JForex Wiki fornece uma explicação sobre seu uso. Observe que ma1 é uma matriz, que foi declarada na linha 38 com um tamanho equivalente ao número de todos os instrumentos JForex disponíveis. Em particular, é usado com um valor de índice especial como no ma1instrument. ordinal (). Em outras palavras, está pedindo o slot de instrumentos atual na matriz ma1. O instrumento atual é aquele que é passado para o método na linha 55. Deslizando o código, outro ponto de interesse é a linha 65, mostrando o uso de instrument. getPipValue (). A linha 67 verifica se o número total atual de posição é zero. Se for, o que significa que não há posição aberta, a estratégia prossegue para verificar o sinal de entrada para entrar em um comércio (linhas 68-76). PositionsTotal () é um método personalizado definido nas linhas 84--92. Ele usa um loop FOR para percorrer todos os pedidos obtidos do engine. getOrders (instrumento) Uma vez que uma das condições longas ou curtas, linhas 68 e 72, respectivamente, são atendidas, a estratégia envia um pedido nas linhas 69 para um curto e Linha 73 por um longo período. As especificações de submeter ordens de mercado são descritas no Wiki JForex. Quando você interrompe essa estratégia, onStop (linhas 48-53) é chamado. Para esta estratégia, o programador rola todas as ordens novamente usando engine. getOrders () e fecha cada uma das posições com um comando order. close () na linha 50. É por essa estratégia trivial. Se houver um ponto que você deve lembrar. Observe meu uso dos muitos links para JForex javadoc e JForex Wiki ao longo desta publicação. É provável que você encontre muitas das suas respostas dessas duas fontes. Caso contrário, há sempre o JForex Support Board. Agora que você teve uma idéia de como o MAPlay. java funciona, é hora de testá-lo. Na próxima publicação em janeiro, discutiremos o JForex Historical Tester e o que observar quando estiver executando uma estratégia ao vivo. Examinamos quatro dos seis métodos na interface IStrategy em uma publicação anterior. Os dois últimos métodos, onTick e onBar, são onde sua estratégia se conecta com os dados do mercado. Um ou ambos, esses métodos, é onde você colocou seu algoritmo de negociação. Sua estratégia seria capaz de processar os dados de mercado à medida que eles chegam a um tickbar de cada vez. Lembre-se de que a IStrategy Interface é o esqueleto da sua estratégia. E esse objeto IContext é o coração de sua estratégia. OnTickonBar é o chefe de sua estratégia, que contém seu algoritmo de negociação, que é o cérebro. Heres a definição de método de onTick. Importante: onTick é chamado para todos e cada um dos instrumentos em que a sua plataforma JForex está inscrito (a lista de instrumentos na sua caixa de espaço de trabalho). Deixe-me dizer isso novamente, onTick é chamado para todos e cada um dos instrumentos em que a sua plataforma JForex está inscrito. A prática padrão é filtrar os carrapatos para instrumentos que você não deseja com uma simples declaração de retorno IF. Se (instrumento myInstrument) retornar Os dados do tick real são passados ​​para sua estratégia usando o objeto ITick do parâmetro de métodos OnTick. Dê uma olhada na entrada ITick javadoc para ver o que oferece. OnBar funciona de forma semelhante a onTick. No qual onBar é chamado para todos e cada um dos instrumentos subscritos e período conhecido por JForex. Da mesma forma, você deve filtrar todos os instrumentos e períodos indesejados, ou então haverá resultados esperados da sua estratégia. Outro ponto a observar é que o OnBar fornece tanto um IBar como um AskBar e IBar bidBar, representando as barras de solicitação e oferta. Pergunta: o que acontece quando dois ou mais períodos se sobrepõem, como em 13:45 as barras de 1, 5 e 15 minutos estão chegando ao mesmo tempo (sem mencionar os períodos em segundos também). Resposta: De acordo com o Suporte Dukascopy no fórum, eles vêm em uma ordem rígida, por exemplo (1min 1min 1min 1min 1min 5min 1min 1min 1min 1min 1min 5min.) Eles vêm em ciclos, onde períodos menores chegam em primeiro lugar. Fórum de suporte do JForex À medida que você programa sua estratégia com o JForex, você, sem dúvida, encontrará perguntas próprias. O melhor lugar para perguntar é no fórum oficial de suporte JForex. Este é o último dos três recursos JForex essenciais aos quais eu aludi anteriormente. Mesmo que você não tenha nenhuma pergunta específica, existem exemplos de códigos, discussões de codificação e centenas de QampA existentes de outros desenvolvedores JForex postados no fórum. A discussão até agora tem sido muito alta. Para mostrar o que você pode realmente fazer em um IStrategy, vamos dissecar uma estratégia de trabalho na próxima publicação. E o que mais é melhor examinar do que a estratégia JForex mais popular de todos eles - MAPlay. java. Continuando na Parte 1 desta série: Começando a aprender a programação JForex. Agora estavam prontos para discutir o real. Você cria estratégias JForex usando a interface IStrategy (O que é uma interface). Basicamente, uma interface é um esqueleto de código com um conjunto de métodos vazios predefinidos que você precisará implementar. Os seis métodos padrão da IStrategy Interface são: Abaixo está uma implementação da IStrategy Interface vazia, também conhecida como estratégia JForex. Este código irá compilar bem no JForex e você pode até executá-lo. Mas não faz nada porque não há código para executar em cada um dos métodos. Cada um dos seis métodos será chamado e sairá imediatamente. Cada um dos métodos é desencadeado por um evento específico. Você provavelmente pode adivinhar o que eles são de seu nome. OnStart (linha 5) Este é o primeiro método chamado quando você executa sua estratégia. Ele será executado uma vez e apenas uma vez no início da sua estratégia. Normalmente, você faz sua inicialização aqui. A coisa a observar para onStart está na linha 5 do código. A assinatura do método de onStart é O objeto no parâmetro e dado a você neste método é um objeto IContext. Se IStrakie é o esqueleto, o IContext é o coração da estratégia. Por favor, veja este link do javadoc para o IContext para ver o que esse objeto faz. Javadoc. Agora é um bom momento para apresentar o segundo dos três recursos essenciais de um programador JForex. O JForex Javadoc é a documentação da API mais atualizada que explica todos e cada um dos objetos e métodos da API JForex. Pense nisso como um manual de referência. Note-se que, embora seja abrangente, a maior parte da explicação é muito esparsa e possivelmente incompleta. O IContext é um objeto JForex central para acessar muitos componentes importantes do sistema JForex, como o mecanismo de pedidos, gráficos, consoles, indicadores. Você consegue a ideia. É importante Você normalmente deseja manter uma cópia local, pois esta é a única vez (em onStart) que esse objeto será passado para você no IStrategy. OnStop (linha 26) Como o nome sugere, este método é chamado uma vez que você envia um comando de parada para sua estratégia. Você faz o encerramento do seu programa, como o registro e a descarga de dados aqui. Não muito fora do comum com este. OnMessage (linha 18) Enquanto sabemos quando onStart e onStop serão chamados, onMessage é um método assíncrono em que você não sabe exatamente quando ele será executado. Esse método é chamado quando o servidor Dukascopy envia sua estratégia para uma mensagem. Por exemplo, o servidor chama onMessage para que você saiba que seu pedido foi preenchido. Você recebe e processa a mensagem do servidor acessando o objeto IMessage que é passado para você. Importante: não há garantia de que você receberá todas e cada uma das mensagens enviadas para a sua estratégia a partir do servidor. Talvez seu processo de estratégia esteja obstruído. Ou talvez sua conexão com a internet tivesse um soluço. Se a sua estratégia onMessage não for chamada pelo servidor por qualquer motivo, o servidor não poderia se importar menos e não estará checando nem tentando novamente. Então, não faça nada crítico, como gerenciar suas ordens no onMessage onAccount (linha 22). Esse método é chamado sempre que a atualização de informações da sua conta é recebida. O método fornece acesso ao objeto IAccount. Que você usa para obter as informações da sua conta. Diga se você tem uma posição aberta, as informações da sua conta mudam em cada tiquetaque porque seu patrimônio líquido é um lucro líquido não realizado em dinheiro. Nesse caso, onAccount é chamado a cada 5 segundos pelo servidor no máximo para evitar inundar sua estratégia. Mais importante: o objeto IAccount não está conectado ao vivo em sua conta no servidor. É apenas um instantâneo da sua conta. Por exemplo, se você mantiver uma cópia local de um objeto IAccount. Faça algumas negociações para alterar seu saldo. Em seguida, peça a mesma conta IAccount para informações de saldo da conta, você não verá uma alteração. Como tal, sempre atualize sua cópia local do IAccount dentro do método onAccount para manter as informações da sua conta atualizadas para o uso de suas estratégias. Para continuar os métodos onStart, onStop, onMessage e onAccount são métodos administrativos para sua estratégia. Os dois últimos métodos que bem discutem, onTick e onBar, é onde a magia acontece em uma estratégia. Eu estou guardando o melhor para o último na próxima publicação. Eu coloquei uma miríade de obstáculos para configurar a plataforma de negociação JForex em um intento gratuito de t1.micro da Amazon AWS. Passo pelas etapas que eu passei para configurar um servidor em nuvem para o JForex nesta publicação. No final, descobri que a instância do t1.micro bloqueia a execução do ambiente de trabalho GNOME no Ubuntu Maverick. Eu habilitei o utilitário Amazons CloudMonitor e a medida da CPU está bloqueada em 100 a partir da execução da plataforma JForex e da área de trabalho. Isso é esperado porque eu suspeitava que o t1.micro não seria capaz de lidar com toda essa exibição de gráficos. Eu escolhi executar o Ubuntu na EC2 porque isso é o que estou familiarizado com em casa. Eu também considere executar o CentOS porque é lendário como um servidor corporativo. No entanto, eu leio comentários de indivíduos que executam seu próprio VPS privado dizendo que o CentOS é muito seguro, mas é muito apertado. Como o JForex precisa de uma versão comercial comercial relativamente recente da Sun Java, eu escolho uma distribuição Linux mais fácil para minha instância EC2. Uma queixa menor que tenho com o Ubuntu é que a EBS Amazon Machine Image (AMI) vem em 15 GB. Considerando que a oferta gratuita da Amazon apenas oferece 10 GB de uso gratuito de EBS. Então, há um extra de 5 GB que será cobrado mensalmente. Isso foi discutido no fórum do desenvolvedor e parece que as versões subseqüentes do AMI da versão do Ubuntu serão em 10 GB. No entanto, este 5 GB equivale a apenas 0,55 por mês. Ainda assim, eu quero sair, eu comecei o meu teste no EC2 usando a variante do servidor do Ubuntu. Tem menos desordem e potencialmente mais seguro que a variante de mesa normal. No entanto, obter uma área de trabalho remota no servidor me levou duas noites para descobrir. Meu problema é conseguir que um servidor NX funcione. Eu tentei o comercial, mas livre, nxserver da NoMachine. Eu tentei a implementação GPL, FreeNX. E tentei a adaptação de código aberto Googles, Neatx. Simplesmente não funcionaria Assim que resolvi um problema, algo mais se quebra. No começo, era um problema de autenticação porque as chaves SSH eram misturadas entre o servidor NX e o servidor SSH. Então, uma vez que seja resolvido, a área de trabalho simplesmente não começaria e sem qualquer mensagem de erro para me dizer o que estava errado. Isso é quando eu desisti da NX e mudei para usar o X2go. Só me levou alguns minutos para instalar o X2go. Funcionou bem desde a instalação. Muitas horas desperdiçadas no NX. Uma vez que eu tivesse minha área de trabalho remota funcionando, eu tentei instalar o Sun Java para JForex. Depois de algumas tentativas falhadas, descobri sobre esse problema. Aparentemente, há um erro no kernel no Ubuntu, no qual a instalação do Sun Java em um t1.micro poderia interromper o instalador. Apenas minha sorte. Até então, minha curiosidade diminuiu e é apenas uma questão de fazer o trabalho. Então, eu reiniciei todo o processo de configuração ainda mais uma vez com uma edição desktop do Ubuntu 10.10 (tem usado a edição do servidor) de 64 bits (para contornar o erro de instalação do Sun Java), instalou o Sun Java, o Google Chrome e o X2go. Conectou-se à área de trabalho remota através do X2go. Lançou o Chrome para acessar o site da Dukascopy. Iniciou o JForex. Leva apenas alguns minutos, uma vez que eu sei o que estou fazendo. Então eu assisti a instância t1.micro chegar a um rastreamento. Theres minha primeira tentativa de executar JForex em um t1.micro gratuito. Minha recomendação não faça isso. Faz um tempo, meu velho amigo - Financiamento Manuvie (MFC. TO). Agora, die Stop é preço de fechamento de ações acima de 14.30, hoje alto. O risco é cerca de (14.30 - 13.97) 4 100 132 27.90 159.90 1.6 de conta. Observe que o cálculo não é responsável pela opção theta (tempo de decaimento). Atualize o dia seguinte: Parou em 8,81 por uma perda de 64,90 0,7 de conta. Estou dando este curto jogo de óleo outra tentativa. Veja o COT de cobertura (CFTC: Compromissos de Comerciantes) dados de juros abertos (parte inferior da Fig. 1). Esperei por uma quebra na tabela horária (Fig. 2) para fazer minha entrada neste curto. O mercado está enrolando durante todo o mês de outubro. Algo grande está para acontecer mais cedo ou mais tarde. Talvez as eleições de meio período nos EUA amanhã possam finalmente mudar esse mercado. Stop está em 8.80. O risco é (9.03 - 8.80) 250 57.50 9.90 comissão 67.40 0.68 de conta. O tamanho da posição ainda é pequeno com essa falta de volume de mercado. O desempenho do cálculo numérico é importante se você estiver calculando conjuntos de dados gigantes ou tiver capacidade de processamento limitada. Eu pertenço no último caso, como eu pretendo executar o meu sistema comercial em um servidor de nuvem livre no futuro. Há uma abundância de pesquisas e estudos para empurrar o limite da computação numérica de alto desempenho em Java (ver ref. 1 e 2). A maioria dos mais recentes e melhores está além do escopo do meu trabalho quantitativo. O que procuro é desempenho com simplicidade e eficiência. Foi assim que eu percebi o Projeto Colt pelo CERN, e seu ramo multi-threaded. O Colt é um conjunto de bibliotecas Java de código aberto para problemas de computação científica e técnica caracterizados por grandes tamanhos de dados, exigindo alto desempenho e pouca pegada de memória. Apenas o que eu precisava. Por curiosidade, testei sua implementação de arrays duplos e comparei seu desempenho com bibliotecas Java padrão. Uma amostra aleatória de um milhão de valores decimais (por exemplo, preços) são gerados e armazenados em quatro estruturas de dados Java. Todas as estruturas de dados têm o mesmo milhão de valores em seus respectivos espaços de memória. Primitive double array ArrayList de objetos duplos Colt Parallel Colt Três testes foram executados. Uma função de diferença simples. Uma parcela dos milhões de pontos de dados e o cálculo de arrayi - arrayi - shift para todos eu mudo para 1.000.000. Onde turno é um número inteiro aleatório de 0 a 50. Este tipo de cálculo é um lugar comum em indicadores de análise técnica. Uma função de classificação classificando o milhão de pontos de dados na matriz em ordem crescente. Isso é útil para algumas análises estatísticas. No caso da matriz primitiva, estou usando java. util. Arrays. sort (). Caso contrário, estou usando o método sort () implícito nas outras interfaces. Uma função de pesquisa binária nas matrizes ordenadas. Para a matriz primitiva, estou usando java. util. Arrays. binarySearch (). Cada teste é executado 3 vezes com diferentes sementes aleatórias e os resultados são calculados em média. O sistema executa o Java SE build 1.6.022-b04 e o kernel do Linux 2.6.35-22 em um Intel Core 2 Duo 6300 1.86 GHz. Para o diff, a matriz primitiva teve uma média de 9,3 milissegundos ArrayList 27 ms. Colt 14 ms. Coluna paralela 15 ms. Para ordenar, primitivo 354,7 ms. ArrayList 1.316 ms. Colt 270.3 ms. Coluna paralela 273 ms. Para pesquisa, primitivo 559,7 ms. ArrayList 1,561.7 ms. Colt 575.7 ms. Parallel Colt 551,3 ms. Discussão Como este não é um teste vigoroso, eu não me importaria demais com os números reais. A mensagem de levar para casa aqui é que o desempenho do Colt é pelo menos na mesma magnitude de uma matriz primitiva. Considerando que um objeto ArrayList padrão é uma magnitude pior. No entanto, onde Colt realmente brilha é em seus métodos de manipulação de matrizes. Oferece muitas funções convenientes para cálculos matriciais, garantindo um bom desempenho. Para trabalhar com matrizes em Java, você usa bibliotecas de terceiros, como o Colt, ou gerencia um monte de loops. O que não é bonito. Referências 1 Moreira, et al. Programação Java para computação numérica de alto desempenho, IBM Systems Journal, Vol. 39, No. 1, pp. 21-56, 2000. 2 Wendykier e Nagy, Parallel Colt: uma biblioteca Java de alto desempenho para computação científica e processamento de imagens, ACM Transactions on Mathematical Software, Vol. 37, nº 3, setembro de 2010.

No comments:

Post a Comment